package com.yunpeng.aidevice.biz.service;

import com.yunpeng.aidevice.common.vo.user.MerchantLoginUserVO;
import com.yunpeng.common.dto.Result;
import com.yunpeng.aidevice.common.dto.query.UserQueryDTO;
import com.yunpeng.aidevice.common.dto.save.UserSaveDTO;
import com.yunpeng.common.paging.PagingQueryDTO;
import com.yunpeng.aidevice.common.vo.SimpleEntityVO;
import com.yunpeng.aidevice.common.vo.user.UserBasicInfoVO;

import java.util.List;

/**
 * IUserBizService 用户业务服务
 *
 * @author : Moore(hemw)
 * @date : 2020-04-13
 */
public interface IUserBizService {
    /**
     * 新增用户
     *
     * @param userSaveDTO  用户信息
     * @param operatorCode 操作人代码
     * @return
     */
    Result<Void> addNewUser(UserSaveDTO userSaveDTO, String operatorCode);

    /**
     * 更新用户基础信息
     *
     * @param userSaveDTO 更新信息
     * @param operator    操作人
     * @return
     */
    Result<Void> updateUserBasicInfo(UserSaveDTO userSaveDTO, String operator);

    /**
     * 获取用户基本信息
     *
     * @param userCode     用户代码
     * @param merchantCode 商户代码
     * @return
     */
    Result<UserBasicInfoVO> getUserBasicInfo(String userCode, String merchantCode);


    /**
     * 更新用户绑定组织信息
     *
     * @param userCodes        用户代码集合
     * @param organizationCode 组织机构代码
     * @param operatorUser     操作人代码
     * @param merchantCode     商户代码
     * @return
     */
    Result<Void> usersBindOrganization(List<String> userCodes, String organizationCode, String operatorUser, String merchantCode);

    /**
     * 商户端用户列表
     *
     * @param userQueryDTO 用户查询对象
     * @return
     */
    Result<PagingQueryDTO> queryUserList(UserQueryDTO userQueryDTO);

    /**
     * 禁用启用用户
     *
     * @param enable       启用/禁用
     * @param userCode     用户代码
     * @param merchantCode 商户代码
     * @param tenantCode   租户代码
     * @param operatorCode 操作人代码
     * @return
     */
    Result<Void> enableOrDisableUser(Boolean enable, String userCode, String merchantCode, String tenantCode, String operatorCode);

    /**
     * 用户下拉数据
     *
     * @param merchantCode
     * @param tenantCod
     * @return
     */
    Result<List<SimpleEntityVO>> dropDownList(String merchantCode, String tenantCod);

    /**
     * 删除用户
     *
     * @param userCode
     * @param merchantCode
     * @param tenantCode
     * @return
     */
    Result<Void> removeUser(String userCode, String merchantCode, String tenantCode);

    /**
     * 修改密码
     *
     * @param userCode        用户代码
     * @param historyPassword 历史密码
     * @param password        新密码
     * @return
     */
    Result<Void> updatePassword(String userCode, String historyPassword, String password);

    /**
     * 重置密码
     *
     * @param userCode     用户代码
     * @param merchantCode 商户代码
     * @return
     */
    Result<Void> resetPassword(String userCode, String merchantCode);

    /**
     * 根据用户电话号码精确匹配商户信息(作为登录选择)
     *
     * @param phone
     * @return
     */
    Result<List<MerchantLoginUserVO>> getMerchantUserByPhone(String phone);
}
